package com.example.carrierapp.util;

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

import java.util.regex.Pattern;

/**
 * 输入框工具类
 */
public class EditTextUtils {

    private static String TAG = "EditTextUtils";
    public static final short DRAWABLE_LEFT = 0;
    public static final short DRAWABLE_TOP = 1;
    public static final short DRAWABLE_RIGHT = 2;
    public static final short DRAWABLE_BOTTOM = 3;

    /**
     * 隐藏输入框
     *
     * @param activity
     */
    public static void hideSoftKeyboard(Activity activity) {
        if (activity == null) return;
        if (activity.getCurrentFocus() == null) return;
        if (activity.getCurrentFocus().getWindowToken() == null) return;
        InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
    }

    /**
     * 判断触摸控件是否是EditTex，以此来判断是否隐藏输入框
     */
    public static void setupUI(final Activity activity, View view) {

        //Set up touch listener for non-text box views to hide keyboard.
        if (!(view instanceof EditText)) {
            view.setOnTouchListener(new View.OnTouchListener() {
                public boolean onTouch(View v, MotionEvent event) {
                    hideSoftKeyboard(activity);  //Main.this是我的activity名
                    return false;
                }
            });
        }

        //If a layout container, iterate over children and seed recursion.
        if (view instanceof ViewGroup) {
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                View innerView = ((ViewGroup) view).getChildAt(i);
                setupUI(activity, innerView);
            }
        }
    }

    /**
     * EditText的drawable点击事件，同时隐藏输入框
     *
     * @param activity
     * @param editText         输入框
     * @param drawableType     输入Drawable样式
     * @param padding          输入框Padding
     * @param isHidInput       点击时是否隐藏软键盘
     * @param drawableListener 回调接口
     */
    public static void drawableUp(final Activity activity, final EditText editText,
                                  final short drawableType, final int padding,
                                  final boolean isHidInput,
                                  final DrawableListener drawableListener) {
        //edittext点击事件
        editText.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // et.getCompoundDrawables()得到一个长度为4的数组，分别表示左右上下四张图片
                Drawable drawable = null;
                boolean isUp = false; //是否按下
                //如果不是按下事件，不再处理
                if (event.getAction() != MotionEvent.ACTION_UP) {
                    return false;
                }
                switch (drawableType) {
                    case DRAWABLE_LEFT:
                        drawable = editText.getCompoundDrawables()[0];//drawableLeft
                        if (event.getX() <= (editText.getPaddingLeft()
                                + drawable.getIntrinsicWidth()) + padding)
                            isUp = true;
                        break;
                    case DRAWABLE_TOP:
                        drawable = editText.getCompoundDrawables()[1];//drawableTop

                        break;
                    case DRAWABLE_RIGHT:
                        drawable = editText.getCompoundDrawables()[2];//drawableRidht
                        if (event.getX() >= editText.getWidth()
                                - editText.getPaddingRight()
                                - drawable.getIntrinsicWidth() - padding)
                            isUp = true;
                        break;
                    case DRAWABLE_BOTTOM:
                        drawable = editText.getCompoundDrawables()[3];//drawableBottom

                        break;
                }
                //如果右边没有图片，不再处理
                if (drawable == null)
                    return false;

                if (isUp) {//点击按钮
                    if (isHidInput) { //隐藏软键盘
                        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
//                        editText.setInputType(0);
                    }
                    //点击事件
                    drawableListener.onPut();
                }

                return false;
            }
        });
    }

    public interface DrawableListener {
        void onPut();
    }
    /**
     * 验证手机号码（支持国际格式，+86135xxxx...（中国内地），+00852137xxxx...（中国香港））
     *
     * @param mobile 移动、联通、电信运营商的号码段
     *               <p>
     *               移动的号段：134(0-8)、135、136、137、138、139、147（预计用于TD上网卡）
     *               、150、151、152、157（TD专用）、158、159、187（未启用）、188（TD专用）
     *               </p>
     *               <p>
     *               联通的号段：130、131、132、155、156（世界风专用）、185（未启用）、186（3g）
     *               </p>
     *               <p>
     *               电信的号段：133、153、180（未启用）、189
     *               </p>
     * @return 验证成功返回true，验证失败返回false
     */
    public static boolean checkMobile(String mobile) {
        // String regex = "^((1[3,5,8][0-9])|(14[5,7])|(17[0-9]))\\d{8}$";
        String regex = "^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[036-8])\\d{8}$";
        // String regex = "(\\+\\d+)?1[3458]\\d{9}$";
        return Pattern.matches(regex, mobile);
    }
}
